package com.wh.wisdomsite.xbox.core;

import com.wh.wisdomsite.xbox.common.XboxContext;
import com.wh.wisdomsite.xbox.core.event.XboxEventListener;
import com.wh.wisdomsite.xbox.core.interceptor.Interceptor;
import com.wh.wisdomsite.xbox.core.security.SecurityManager;
import com.wh.wisdomsite.xbox.core.security.InvokeTimesController;
import com.wh.wisdomsite.xbox.common.session.SessionManager;
import com.wh.wisdomsite.xbox.core.threadpool.JobDispathcher;
import org.springframework.context.ApplicationContext;
import javax.servlet.AsyncContext;


/***
 * 定义服务转发器接口
 * @Package com.wh.wisdomsite.xbox.core
 * @author 谢泽鹏
 * @date 2016年11月07日 下午15:10
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2016
 * @version V1.0
 */
public interface ServiceDispatcher {

    /**
     * 设置安全认证管理器
     * @param securityManager
     */
    void setSecurityManager(SecurityManager securityManager);

    /**
     * 设置session管理器
     * @param sessionManager
     */
    void setSessionManager(SessionManager sessionManager);


    /**
     * 设置上下文
     * @param applicationContext
     */
    void setApplicationContext(ApplicationContext applicationContext);

    /**
     * 服务总入口,需容器异步支持
     * @param asyncContext
     */
    void execute(AsyncContext asyncContext);


    /**
     * 启动框架
     */
    void startup();

    /**
     * 关闭框架
     */
    void shutdown();

    /**
     * 增加监听器
     * @param xboxEventListener
     */
    void addListener(XboxEventListener xboxEventListener);

    /**
     * 增加拦截器
     * @param interceptor
     */
    void addInterceptor(Interceptor interceptor);

    /**
     * 是否需要签名
     * @param signEnable
     */
    void setSignEnable(boolean signEnable);

    /**
     * 国际化配置文件根路径
     * @param extErrorBaseName
     */
    void setExtErrorBaseName(String extErrorBaseName);

    /**
     * 设置访问次数和频率控制器
     *
     * @param invokeTimesController
     */
    void setInvokeTimesController(InvokeTimesController invokeTimesController);

    /**
     * 设置权重线程池
     * @param jobDispathcher
     */
    void setJobDispathcher(JobDispathcher jobDispathcher);


    /**
     * 设置XboxContext
     * @param xboxContext
     */
    void setXboxContext(XboxContext xboxContext);

    /**
     * 获取XboxContext
     * @return
     */
    XboxContext getXboxContext();


    /**
     *
     * @param eventAsync
     */
    void setEventAsync(boolean eventAsync);

    /**
     *
     * @return
     */
    JobDispathcher getJobDispathcher();

    /**
     *
     * @return
     */
    SecurityManager getSecurityManager();



}
